﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Media.Imaging;
using System.IO;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Classe Helper pour les <see cref="BitmapImage"/>
    /// </summary>
    public static class BitmapImageHelper
    {
        /// <summary>
        /// Enregistre un <see cref="BitmapSource"/> dans un fichier
        /// </summary>
        /// <param name="bitmapSource"><see cref="BitmapSource"/> à enregistrer</param>
        /// <param name="path">Emplacement physique du fichier à générer</param>
        /// <param name="encoder">Encoder à utiliser pour l'enregistrement</param>
        public static void Save(this BitmapSource bitmapSource, string path, BitmapEncoder encoder)
        {
            using (FileStream stream = new FileStream(path, FileMode.Create))
            {
                encoder.Frames.Add(BitmapFrame.Create(bitmapSource));
                encoder.Save(stream);
            }
        }

        /// <summary>
        /// Crée un <see cref="BitmapSource"/> à partir d'une liste de pixels
        /// </summary>
        /// <param name="pixels">Liste des pixels pour ce <see cref="BitmapSource"/></param>
        /// <param name="width">Largueur de l'image</param>
        /// <param name="height">Hauteur de l'image</param>
        /// <param name="stride">Longueur d'une ligne de pixels</param>
        /// <param name="dpiX">dpi sur l'axe X</param>
        /// <param name="dpiY">dpi sur l'axe Y</param>
        /// <param name="format">Format des pixels</param>
        /// <returns>Retourne le <see cref="BitmapSource"/> généré.</returns>
        public static BitmapSource ToBitmapSource(this byte[] pixels, int width, int height, int stride, double dpiX, double dpiY, PixelFormat format)
        {
            WriteableBitmap output = new WriteableBitmap(width, height, dpiX, dpiY, format, null);
            output.WritePixels(new Int32Rect(0, 0, width, height), pixels, stride, 0);
            return output;
        }
    }
}
